const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();  // 引入 sqlite3
const apiRoutes = require('./routes/apiRoutes'); // 引入自定义的 API 路由

// 创建 Express 应用
const app = express();

// 使用路由
app.use('/api', apiRoutes);

// 启用 CORS
app.use(cors());

// 解析 JSON 请求体
app.use(bodyParser.json());

// 连接 SQLite 数据库
const db = new sqlite3.Database('./courses.db', (err) => {
  if (err) {
    console.error('无法连接到 SQLite 数据库:', err.message);
  } else {
    console.log('已连接到 SQLite 数据库');
  }
});

// 创建行程表（如果不存在）
db.serialize(() => {
  db.run(`
    CREATE TABLE IF NOT EXISTS courses (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      time INTEGER,
      day INTEGER,
      name TEXT,
      instructor TEXT
    )
  `);
});

// 获取所有行程
app.get('/api/courses', (req, res) => {
  db.all("SELECT * FROM courses", [], (err, rows) => {
    if (err) {
      console.error('获取行程失败:', err.message);
      return res.status(500).json({ message: '获取行程失败', error: err.message });
    }
    res.json(rows);
  });
});

// 添加或更新行程
app.post('/api/courses', (req, res) => {
  const { time, day, name, instructor } = req.body;

  // 检查行程是否已经存在
  db.get("SELECT * FROM courses WHERE time = ? AND day = ?", [time, day], (err, row) => {
    if (err) {
      console.error('查询行程失败:', err.message);
      return res.status(500).json({ message: '查询行程失败', error: err.message });
    }

    if (row) {
      // 更新已存在的行程
      db.run("UPDATE courses SET name = ?, instructor = ? WHERE time = ? AND day = ?", [name, instructor, time, day], function(err) {
        if (err) {
          console.error('更新行程失败:', err.message);
          return res.status(500).json({ message: '更新行程失败', error: err.message });
        }
        res.json({ id: row.id, time, day, name, instructor });
      });
    } else {
      // 插入新行程
      db.run("INSERT INTO courses (time, day, name, instructor) VALUES (?, ?, ?, ?)", [time, day, name, instructor], function(err) {
        if (err) {
          console.error('添加行程失败:', err.message);
          return res.status(500).json({ message: '添加行程失败', error: err.message });
        }
        res.json({ id: this.lastID, time, day, name, instructor });
      });
    }
  });
});

// 启动服务器
const port = 5000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});
